<?php
require_once("Carapi2.php");
$serv=new Swoole\Server("0.0.0.0",9501);
$serv->set([
    "heartbeat_idle_time"=>"120",
    "heartbeat_check_interval"=>"60",
    'open_eof_check' => true,   //打开EOF检测
    'package_eof'    => "\r\n", //设置EOF
    //'daemonize'=>"1",
]);

//监听连接进入时间
$serv->on("Connect",function($serv,$fd){
    $path=dir(getcwd())->path.'/log2/'.date('Ymd');
    if (! file_exists ( $path )) {
        mkdir ( "$path", 0777, true );
    }
    
    file_put_contents($path."/connect.txt",date("Y-m-d H:i:s")."Client".$fd.":连接成功:\r\n"."\r\n",FILE_APPEND);
    echo "Client ".$fd.": Connect.\n";
});

//监听数据接收事件
$serv->on("Receive",function($serv,$fd,$from_id,$data){
    $path=dir(getcwd())->path.'/log2/'.date('Ymd');
    if (! file_exists ( $path )) {
        mkdir ( "$path", 0777, true );
    }
    //echo "接收到".$fd."的信息的".$data."\r\n\r\n";
    $indata=json_decode($data,true);
    $result="Server: ";
    
    //登录信息
    if($indata["bizCode"]=="B1001"){
        file_put_contents($path."/login.txt",date("Y-m-d H:i:s")."接收客户端登录信息:\r\n".$data."\r\n",FILE_APPEND);
        //echo "接收到".$fd."的登录信息的".$data."\n";
        $result=(new Carapi2())->login($indata,$fd);
        //echo "登录信息返回: ".$result." \n";
        file_put_contents($path."/login.txt",date("Y-m-d H:i:s")."登录信息返回:\r\n".$result."\r\n",FILE_APPEND);
        $serv->send($fd,$result."\r\n");
    }
    
    //退出登录
    if($indata["bizCode"]=="B1003"){
        
    }
    //心跳信息返回
    if($indata["bizCode"]=="B1005"){
        file_put_contents($path."/heartbeat.txt",date("Y-m-d H:i:s")."心跳接收:\r\n".$data."\r\n",FILE_APPEND);
        //echo "接收到".$fd."的心跳信息的".$data."\n";
        $result=(new Carapi2())->heartbeat($indata);
        //echo "心跳返回客户端信息: ".$result." \n";
        //$buf= $result;
        file_put_contents($path."/heartbeat.txt",date("Y-m-d H:i:s")."心跳返回:\r\n".$result."\r\n",FILE_APPEND);
        $serv->send($fd,$result."\r\n");
    }
    
    //车辆入场
    if($indata["bizCode"]=="B1007"){
        
        file_put_contents($path."/carin.txt",date("Y-m-d H:i:s")."入场信息:\r\n".$data."\r\n",FILE_APPEND);
        $result=(new Carapi2())->uploadIn($indata);
        
        file_put_contents($path."/carin.txt",date("Y-m-d H:i:s")."入场信息返回:\r\n".$result."\r\n",FILE_APPEND);
        $serv->send($fd,$result."\r\n");
    }
    //扫码出场查询费用
    if($indata["bizCode"]=="C1015"){
        echo "接收到".$fd."的用户扫码查询".$data."\n";
        $result=(new Carapi2())->outPay($indata,$fd);
        file_put_contents($path."/msg.txt",date("Y-m-d H:i:s")."用户扫码查询:\r\n".$data."\r\n",FILE_APPEND);
        //$result=(new Carapi())->test();
        file_put_contents($path."/msg.txt",date("Y-m-d H:i:s")."出口查费请求:\r\n".$result["result"]."\r\n",FILE_APPEND);
        echo "返回扫码信息".$result["result"]."\n";
        $serv->send($result["fd"],$result["result"]."\r\n");
    }
    
    //扫码查询返回信息推送给用户
    if($indata["bizCode"]=="B1016"){
        echo "接收到".$fd."的扫码返回".$data."\n";
        file_put_contents($path."/msg.txt",date("Y-m-d H:i:s")."出口查费返回:\r\n".$data."\r\n",FILE_APPEND);
        //获取用户的链接标识
        $userfd=(new Carapi2())->getFd($indata);
        echo "fd: ".$userfd." \n";
        $serv->send($userfd,$data."\r\n");
    }
    
    //支付成功下发信息
    if($indata["bizCode"]=="B1013"){
        echo "接收到".$fd."的支付成功下发".$data."\n";
        file_put_contents($path."/pay.txt",date("Y-m-d H:i:s")."支付成功下发:\r\n".$data."\r\n",FILE_APPEND);
        $userfd=(new Carapi2())->getClientFd($indata["clientNo"],$indata["parkingNo"]);
        echo "fd: ".$userfd." \n";
        $serv->send($userfd,$data."\r\n");
    }
    
    //异步通知客户端返回
    if($indata["bizCode"]=="B1014"){
        echo "接收到".$fd."的客户端返回".$data."\n";
        file_put_contents($path."/pay.txt",date("Y-m-d H:i:s")."支付成功返回:\r\n".$data."\r\n",FILE_APPEND);
        /*$userfd=(new Carapi())->getFd($indata);
        echo "fd: ".$userfd." \n";
        $serv->send($userfd,$data."\r\n");*/
    }
    //车辆出场
    if($indata["bizCode"]=="B1011"){
        echo "接收到".$fd."的车辆出场数据:".$data."\n";
        $result=(new Carapi2())->carout($indata);
        $serv->send($fd,$result."\r\n");
    }
    //
    if($indata["bizCode"]=="B1009"){
        echo "接收到".$fd."的无感请求数据:".$data."\n";
        $result=(new Carapi2())->applypay($indata);
        echo "无感返回数据:".$result."\r\n";
        $serv->send($fd,$result."\r\n");
    }
    if($indata["bizCode"]=="B1031"){
        echo "接收到".$fd."的月卡请求数据:".$data."\n";
        $result=(new Carapi2())->monthcard($indata);
        echo "月卡返回数据:".$result."\r\n";
        $serv->send($fd,$result."\r\n");
    }
    //$serv->send($fd,$result);
    //$serv->send($fd,$result);
});

//监听连接关闭事件
$serv->on("Close",function($serv,$fd){
    $res=(new Carapi2())->close($fd);
    echo $res."\n";
    echo "Client: ".$fd."Close.\n";
});

echo "启动swoole tcp server 访问地址 0.0.0.0:9501 \n";

//启动服务器
$serv->start();


